<?php

/**
 * 系统加密方法
 * @param string $data 要加密的字符串
 * @param string $key 加密密钥
 * @param int $expire 过期时间 单位 秒
 * @return string
 */
function laravel_encrypt($data, $key = '', $expire = 0)
{
  $key = md5(empty ($key) ? env('DATA_AUTH_KEY') : $key);

  $data = base64_encode($data);
  $x = 0;
  $len = strlen($data);
  $l = strlen($key);
  $char = '';
  for ($i = 0; $i < $len; $i++) {
    if ($x == $l)
      $x = 0;
    $char .= substr($key, $x, 1);
    $x++;
  }
  $str = sprintf('%010d', $expire ? $expire + time() : 0);

  for ($i = 0; $i < $len; $i++) {
    $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1))) % 256);
  }
  return str_replace(array(
      '+',
      '/',
      '='
  ), array(
      '-',
      '_',
      ''
  ), base64_encode($str));
}

/**
 * 系统解密方法
 *
 * @param string $data 要解密的字符串 （必须是think_encrypt方法加密的字符串）
 * @param string $key 加密密钥
 * @return string
 */
function laravel_decrypt($data, $key = '')
{
  $key = md5(empty ($key) ? env('DATA_AUTH_KEY') : $key);
  $data = str_replace(array(
      '-',
      '_'
  ), array(
      '+',
      '/'
  ), $data);
  $mod4 = strlen($data) % 4;
  if ($mod4) {
    $data .= substr('====', $mod4);
  }
  $data = base64_decode($data);
  $expire = substr($data, 0, 10);
  $data = substr($data, 10);
  if ($expire > 0 && $expire < time()) {
    return '';
  }
  $x = 0;
  $len = strlen($data);
  $l = strlen($key);
  $char = $str = '';
  for ($i = 0; $i < $len; $i++) {
    if ($x == $l)
      $x = 0;
    $char .= substr($key, $x, 1);
    $x++;
  }
  for ($i = 0; $i < $len; $i++) {
    if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
      $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
    } else {
      $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
    }
  }
  return base64_decode($str);
}

/**
 * 获取当前登录用户的ID
 * @return \Illuminate\Session\SessionManager|\Illuminate\Session\Store|mixed
 */
function getMemberId()
{
  return session('member_id');
}

/**
 * 获取会员基本信息
 * @return mixed
 */
function getMemberInfo()
{
  return \App\Model\Member::whereId(getMemberId())->select()->first();
}
